package com.atguigu.srb.core.service.impl;

import com.atguigu.srb.base.result.ResponseVo;
import com.atguigu.srb.base.util.JwtUtils;
import com.atguigu.srb.core.hfb.FormHelper;
import com.atguigu.srb.core.hfb.HfbConst;
import com.atguigu.srb.core.hfb.RequestHelper;
import com.atguigu.srb.core.pojo.entity.UserBind;
import com.atguigu.srb.core.mapper.UserBindMapper;
import com.atguigu.srb.core.service.UserBindService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PostMapping;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 * 用户绑定表 服务实现类
 * </p>
 *
 * @author Atguigu
 * @since 2024-10-11
 */
@Service
public class UserBindServiceImpl extends ServiceImpl<UserBindMapper, UserBind> implements UserBindService {

    @Override
    public String bindHfb(UserBind userBind, String token) {

        Long userId = JwtUtils.getUserId(token);
        Map<String,Object> params = new HashMap<>();

        params.put("agentUserId",userId);//srb中当前用户的id
        params.put("idCard",userBind.getIdCard());
        params.put("personalName",userBind.getName());
        params.put("bankType",userBind.getBankType());
        params.put("bankNo",userBind.getBankNo());
        params.put("mobile",userBind.getMobile());
        //同步地址：用户绑定后 hfb页面中显示返回商家的连接地址
        params.put("returnUrl",HfbConst.USERBIND_RETURN_URL);
        //异步回调地址：用户绑定后hfb要访问的接口地址 hfb会传入用户绑定的结果（需要同步到srb的数据库）
        params.put("notifyUrl",HfbConst.USERBIND_NOTIFY_URL);
        params.put("timestamp",System.currentTimeMillis());

        //srb在hfb中注册时 hfb会分配这两个值
        params.put("agentId", HfbConst.AGENT_ID);//srb在hfb平台注册时分配的唯一id
        //签名：保证数据不会呗篡改  使用key和加密算法 对上面的数据进行加密得到的结果设置给sign
        params.put("sign", RequestHelper.getSign(params));//签名

        //保存用户数据到数据库user_bind中
        //userId在user_bind表中如果存在绑定纪录 更新  如果不存在则新增
        UserBind ub = this.getOne(Wrappers.lambdaQuery(UserBind.class).eq(UserBind::getUserId, userBind));
        if (ub == null){
            //新增
            ub = new UserBind();
        }
        //将上面接收到的数据属性值设置给ub对象
        ub.setUserId(userId);
        ub.setStatus(0);
        ub.setMobile(userBind.getMobile());
        ub.setBankNo(ub.getBankNo());
        ub.setBankType(userBind.getBankType());
        ub.setIdCard(userBind.getIdCard());
        ub.setName(userBind.getName());
        this.saveOrUpdate(ub);
        return FormHelper.buildForm(HfbConst.USERBIND_URL,params);
    }



}
